package com.hive

import org.apache.spark.sql.SparkSession

object HiveWrite {
  /**
   * 创建方式1
   */
  def demo01(spark: SparkSession): Unit = {
    // 先创建换一个数据库
    spark.sql("show databases").show
    spark.sql("create database ceshi").show // 如果数据库存在会抛异常
    spark.sql("use ceshi").show
    spark.sql("create table user1(id int, name string)").show //如果表存在会抛异常
    spark.sql("insert into user1 values(10, 'lisi')").show
  }

  /**
   * 创建方式2
   *
   */
  def demo02(spark: SparkSession): Unit = {
    spark.sql("show databases").show
    spark.sql("create database ceshi2").show // 如果数据库存在会抛异常
    //读取json里面的数据,转成DataFrame
    val df = spark.read.json("E:\\ZJJ_SparkSQL\\demo01\\src\\main\\resources\\users.json")
    spark.sql("use ceshi2")
    //    // 直接把数据写入到hive中. 表可以存着也可以不存在
    df.write.mode("append").saveAsTable("user2")
    df.write.insertInto("user2") // 基本等于 mode("append").saveAsTable("user2")
  }

  def main(args: Array[String]): Unit = {
    //  设置登录人,不然会出现没有权限问题
    System.setProperty("HADOOP_USER_NAME", "root")
    val spark: SparkSession = SparkSession
      .builder()
      .master("local[*]")
      .appName("HiveWrite")
      .enableHiveSupport()
      // 指定Hive的数据仓库的位置,这个路径是hdfs上面的路径
      .config("spark.sql.warehouse.dir", "hdfs://zjj101:9000/user/hive/warehouse")
      .getOrCreate()
    //    demo01(spark) // 创建数据库和表插入数据方式1
    demo02(spark) // 创建数据库和表插入数据方式1


    spark.close()


  }
}
